<?php


namespace app\api\model;


use think\Model;
use think\model\concern\SoftDelete;

class SystemUser extends Model
{
    use SoftDelete;

    // 设置表名
    protected $name = 'system_user';

    // 设置主键
    protected $pk = 'id';

    // 自动写入时间戳
    protected $autoWriteTimestamp = true;
    protected $createTime = 'create_time';
    protected $updateTime = 'update_time';
    protected $deleteTime = 'delete_time';

    // 字段自动完成
    protected $auto = [];
    protected $insert = ['status' => 1];
    protected $update = [];

    // 字段类型转换
    protected $type = [
        'id' => 'integer',
        'status' => 'integer',
        'sex' => 'integer',
    ];

    // 验证规则
    public $rules = [
        'username' => 'require|alphaNum|length:1,20',
        'password' => 'require|alphaNum|length:1,20',
        'truename' => 'require|length:1,20',
        'phone' => 'length:0,20|number',
        'email' => 'length:0,50',
        'desc' => 'length:0,150',
        'role' => 'require',
        'status' => 'require|in:0,1',
        'sex' => 'require|in:1,2',
    ];

    // 验证错误提示
    public $msg = [
        'username.require' => '管理员名称不能为空',
        'username.alphaNum' => '管理员名称只能包含字母和数字',
        'username.length' => '管理员名称长度必须在1-20个字符之间',
        'password.require' => '密码不能为空',
        'password.alphaNum' => '密码只能包含字母和数字',
        'password.length' => '密码长度必须在1-20个字符之间',
        'truename.require' => '管理员昵称不能为空',
        'truename.length' => '管理员昵称长度必须在1-20个字符之间',
        'phone.length' => '手机号长度不能超过20个字符',
        'phone.number' => '手机号只能包含数字',
        'email.length' => '邮箱长度不能超过50个字符',
        'desc.length' => '备注长度不能超过150个字符',
        'role.require' => '平台角色不能为空',
        'status.require' => '用户状态不能为空',
        'status.in' => '用户状态值不正确',
        'sex.require' => '性别不能为空',
        'sex.in' => '性别值不正确',
    ];

    /**
     * 设置密码
     * @param string $value
     * @return string
     */
    public function setPasswordAttr($value)
    {
        //return password_hash($value, PASSWORD_DEFAULT);
        return md5($value);
    }

    /**
     * 获取状态文字
     * @param $value
     * @return string
     */
    public function getStatusTextAttr($value, $data)
    {
        $status = [0 => '隐藏', 1 => '显示'];
        return isset($status[$data['status']]) ? $status[$data['status']] : '未知';
    }

    /**
     * 获取性别文字
     * @param $value
     * @return string
     */
    public function getSexTextAttr($value, $data)
    {
        $sex = [1 => '男', 2 => '女'];
        return isset($sex[$data['sex']]) ? $sex[$data['sex']] : '未知';
    }

    /**
     * 获取角色文字
     * @param $value
     * @return string
     */
    public function getRoleTextAttr($value, $data)
    {
        $roles = [
            'superAdmin' => '超级管理员',
            'admin' => '管理员',
            'common' => '普通用户'
        ];
        return isset($roles[$data['role']]) ? $roles[$data['role']] : $data['role'];
    }
}